package com.woniuxy.controller;

import com.woniuxy.pojo.User;
import com.woniuxy.service.UserService;
import com.woniuxy.util.Constant;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {
    private Logger logger= Logger.getLogger(LoginController.class);
    @Autowired
    private UserService userService;
    @PostMapping(value = "/login")
    /**
     * 1.如果控制器中的处理方法返回值为String
     * 返回值就为跳转的路径
     * 2.在springmvc中后端接收客户端简单参数有如下处理方法
     * 1）使用HttpServletRequest方法进行处理
     * 使用基于Servlet API的方式，缺点
     *  第1：接收过来的数据只能是字符串，如果有其他类型需要转换
     *  第2：与Servlet的耦合性太高
     *  public String login(HttpServletRequest request){
         String telephone=request.getParameter("telephone");
         String password=request.getParameter("password");
         logger.debug("手机号:"+telephone);
         logger.debug("密码:"+password);
         return "index";
       }
     2)使用名称直接对应
      这种方式显然要比前面的方式要
      第1：可以接收各种数据类型,使用到框架的实现了类型转换
      第2：与servlet耦合性降低了
      注意：如果前台传递的数据的名称与服务端形参的名称不一致
       使用@RequestParam来完成
     3.如何在SpringMVC中使用HttpSession
       1)通过HttpServletRequest对象中getSession()方法来获取
       2)将HttpSession作为控制器中的处理方法的形参传递
     */
    public String login(@RequestParam("telephone") String tel,
                        @RequestParam("password")String pwd,
                        HttpServletRequest request,
                        HttpSession session){
        logger.debug("手机号:"+tel);
        logger.debug("密码:"+pwd);
        User user=userService.login(tel,pwd);
        if(user!=null){
            //HttpSession session1=request.getSession();
            session.setAttribute("SESSION_USER",user);
            return "index";
        }else{
            /**
             * 如果不想使用视图解析器，那么转发可以使用forward:方式来实现转发
             */
            request.setAttribute("loginError", Constant.LOGINERROR);
            return "forward:/login.jsp";
        }
    }

}
